package com.liugui.objectoriented;

/**
 * @ClassName: People
 * @Author: liugui
 * @Date: 2020-10-26 14:10
 **/
public class People {
    private String name = "lilei"; //外部类属性

    //外部类的静态变量。
    static String ID = "510xxx199X0724XXXX";


    public class Student{
        String id = "20120012"; //内部类属性
        public void stuInfo(){  //内部类方法
            System.out.println("访问外部类中的name：" + name);
            System.out.println("访问外部类中的ID：" + People.ID);
            System.out.println("访问内部类中的ID：" + id);
        }
    }

    public void peopleInfo() {
        final String sex = "man";  //外部类方法中的常量
        //局部内部类
        class Student {
            String ID = "20151234"; //内部类中的常量
            public void print() {
                System.out.println("访问外部类的方法中的常量sex：" + sex);
                System.out.println("访问内部类中的变量ID:" + ID);
            }
        }
        Student a = new Student();  //创建方法内部类的对象
        a.print();//调用内部类的方法
    }

    //定义在外部类中的作用域内
    public void peopleInfo2(boolean b) {
        if(b){
            final String sex = "man";  //外部类方法中的常量
            //局部内部类
            class Student {
                String ID = "20151234"; //内部类中的常量
                public void print() {
                    System.out.println("访问外部类的方法中的常量sex：" + sex);
                    System.out.println("访问内部类中的变量ID:" + ID);
                }
            }
            Student a = new Student();  //创建方法内部类的对象
            a.print();//调用内部类的方法
        }
    }

    public static void main(String[] args) {
        People p = new People();
        Student s = p.new Student();
        s.stuInfo();

        People b = new People(); //创建外部类的对象
        System.out.println("定义在方法内：===========");
        b.peopleInfo();  //调用外部类的方法
        System.out.println("定义在作用域内：===========");
        b.peopleInfo2(true);
    }
}
